import { defineStore } from 'pinia'

export const useCounterStore = defineStore('counter', {
  // 定义公共数据
  state: () => ({
    cartList: [], // 购物车列表
    // 地址列表
    addressList: [{
      id: '1',
      name: '张三',
      tel: '13000000000',
      address: '浙江省杭州市西湖区文三路 138 号东方通信大厦 7 楼 501 室',
      isChecked: true, // 当前选中的地址
    },
    {
      id: '2',
      name: '李四',
      tel: '1310000000',
      address: '浙江省杭州市拱墅区莫干山路 50 号',
      isChecked: false,
    },
    {
      id: '3',
      name: '王五',
      tel: '1310000000',
      address: '上海市奉贤区',
      isChecked: false,
    }],
    myorderList: [] // 我的订单列表
  }),
  // 计算属性
  getters: {
    // 购物车列表中商品的总数量 -- 循环遍历购物车列表中的所有对象，求count的和
    totalCount(state) {
      // return this.cartList.reduce((sum, item) => sum + item.count, 0)
      let res = 0
      state.cartList.forEach(item => {
        res += item.count
      })
      return res
    },
    // 购物车中选中商品的总价格
    totalPrice(state) {
      // return this.cartList.reduce((sum, item) => sum + item.count * item.price, 0)
      let res = 0
      state.cartList.forEach(item => {
        if (item.checked == true) {
          res += item.count * item.price
        }
      })
      // 浮点数类型参与计算的时候会有精丢失问题
      return res.toFixed(2) * 100
    },
    // 确认订单列表
    orderList(state) {
      // 购物车列表中选中的商品组成的列表
      return state.cartList.filter(item => item.checked == true)
    },
    // 获取选中的地址
    checkedAddress(state) {
      // find(): 返回数组中满足条件的第一个元素，没有符合的元素的话，返回undefined
      return state.addressList.find(item => item.isChecked == true)
    }
  },
  actions: {
    // 将商品加入到购物车1
    addItem(payload) {
      // payload参数： 商品对象
      // 如果该商品已经在购物车列表中，那就是给这个商品的数量+1，
      // 如果不在购物车列表中，就添加到购物车列表中
      const index = this.cartList.findIndex(item => item.id == payload.id) // findIndex:返回满足条件的元素的索引 或 返回 -1
      if (index > - 1) {
        // 说明此商品已经在购物车里，应该是数量+1
        this.cartList[index].count += 1
      } else {
        // 说明此商品不在购物车里，应该添加到购物车列表中
        this.cartList.push({
          ...payload,
          count: 1, // 商品数量
          checked: false // 是否选中
        })
      }
    },
    // 删除购物车中的商品
    deleteItem(id) {
      // filter过滤 --- 想要的过滤出来
      // 咋们想要的数组是： 除了想删除的这个id对应的这个对象以为剩余的对象组成的数组
      // filter方法不改变原数组
      this.cartList = this.cartList.filter(item => item.id != id)
    },
    // 切换地址 -- 本质是改变isChecked的值 --选中哪条，哪条的isChecked就是true
    changeisChecked(id) {
      // 选中张三这条，就是给id为1的这个对象isChecked赋值为true，其他所有的对象的isChecked赋值为false
      this.addressList.forEach(item => {
        item.isChecked = false
        if (item.id == id) {
          item.isChecked = true
        }
      })
    },
    // 将订单添加到订单列表中
    addmyOrder(payload) {
      this.myorderList.push(payload)
    },
    // 修改传过来的id对应订单的状态-- 从待付款 1 修改为已付款 2
    updateOrderStatus(id) {
      this.myorderList.find(item => item.id == id).status = 2
    }
  },
  persist: true,
})